package com.shujia.scala

import scala.beans.BeanProperty

class Demo16Apply(id:String,name:String,age:Int){
  private val _id = id
  @BeanProperty
  var name1 = name
  val _age = age

  override def toString: String = {
    s"${_id},${name1},${_age}"
  }
}

/**
 * 伴生对象：
 * 1、同class的名字一样
 * 2、apply方法会创建类的对象
 */
object Demo16Apply {

  def apply(id: String, name: String, age: Int): Demo16Apply = new Demo16Apply(id, name, age)

  def main(args: Array[String]): Unit = {
    // 普通构建
    val id:String = "001"
    val name:String = "zs"
    val age:Int = 20
    val obj01: Demo16Apply = new Demo16Apply(id, name, age) // new会调用构造方法

    // 通过类对象直接调用
    val obj02: Demo16Apply = Demo16Apply.apply(id, name, age) // 手动的调用apply方法

    // 可以直接省略new关键字构建对象
    val obj03: Demo16Apply = Demo16Apply(id, name, age) // 自动调用该类的伴生对象中的apply方法

    println(obj01)
    println(obj01._id)
    println(obj02)
    println(obj03)



  }
}
